﻿/************************************************************************/
/* 	安装程序包格式：
		1.执行EXE文件 + 2.包头(_VRV_Install_head) + 3.压缩文件信息头(_VRV_Install_Info) + 4.压缩文件 + 5.crc校验值
*/
/************************************************************************/
#pragma once

#define IID_I7zMgrArchive 1 //7z文件压缩解压类

struct _7zFileInfo
{
	//文件是否文件夹
	bool isDir;
	//文件名称
	wchar_t name[255];
};

class IVrvBase
{
  public:
	/************************************************************************/
	/* 获取当前版本号                                                       */
	/************************************************************************/
	virtual int GetVersion() = 0;
	/************************************************************************/
	/* 释放当前接口															*/
	/************************************************************************/
	virtual void Release() = 0;
};

/************************************************************************/
/*返回0表示获取路径成功。 chRet为返回的路径。*/
/************************************************************************/
typedef int (*pfnGetExtractPath)(int index, wchar_t *chRet, int iLen, void *param);
class I7zMgrArchive
	: public IVrvBase
{
  public:
	virtual bool Open(const wchar_t *chPath, long iOffset = 0) = 0;

	virtual void Close() = 0;

	virtual int GetFileNum() = 0;

	virtual bool GetFileName(int, _7zFileInfo &) = 0;

	virtual bool ExtractFile(int iIndex = -1, const wchar_t *_path = 0, pfnGetExtractPath pfn = 0, void *param = 0) = 0;

	virtual bool ArchiveFiles(const wchar_t *_path) = 0;
};

#ifdef __cplusplus
#define VRV_STDAPI extern "C" 
#else
#define VRV_STDAPI
#endif  /* __cplusplus */ 

VRV_STDAPI IVrvBase* CreateIVrvObj(int iID);
typedef IVrvBase *(*pfnCreateIVrvObj)(int iID);
